# ifndef __CIRCULO__H_

# define __CIRCULO__H_

# include "figura.h"

# include "punto.h"

class Circulo: public Figura
{
	public:
	
		Circulo():r(0)
		{
		};
		
		Circulo(Punto a, float b):c(a), r(b) 
		{
		};
		
		Circulo(const Circulo &ci): Figura(ci), c(ci.c), r(ci.r)
		{
		};
		
		~Circulo()
		{
			this->c.~Punto(); 
			
			this->r = 0;
		};
		
		void trasladar(float, float);
		
		void redimensionar(float, float);
		
		Punto getC()
		{
			return (c);
		};
		
		float getR()
		{
			return (r);
		};

		virtual Punto supIzq()
		{
			Punto p((c.getX() - abs(r)), (c.getY() + abs(r))); 
			
			return (p);
		};
		
		virtual Punto infDer()
		{
			Punto p((c.getX() + abs(r)), (c.getY() - abs(r))); 
			
			return (p);
		};
		
		virtual string Texto(int tab = 0)
		{			
			stringstream ret;
			
			for (int i = 0; i < tab; i++) ret <<'\t';
			
			ret << "Círculo:\n";

			for (int i = 0; i <= tab; i++) ret <<'\t';

			ret  << "Radio: " << r << "\n";

			for (int i = 0; i <= tab; i++) ret <<'\t';

			ret << "Centro: " << c.Texto(0) << endl;
			
			return (ret.str());
		};
		
		virtual bool seleccionar(float, float);
		
		virtual bool contenida(Punto,Punto);
		
		virtual Circulo* clonar ()
		{
			return (new Circulo (*this));
		};
		
		virtual list<Figura*> pintar()
		{
			list<Figura*> ret;
			
			ret.push_back((Figura*)this->clonar());
			
			return ret;
		}
		
	private:
		
		Punto c;
		
		float r;
};

# endif
